#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>

/**
 * @brief 定义参数变量
 * @参数用法：sudo insmod parametermodule.ko itype=123 btype=1 ctype=200 stype=abc
 */
static int itype=0;
module_param(itype,int,0);
EXPORT_SYMBOL(itype); //导出符号

static bool btype=0;
module_param(btype,bool,0600);
EXPORT_SYMBOL(btype); //导出符号

static char ctype=0;
module_param(ctype,byte,0600);
EXPORT_SYMBOL(ctype); //导出符号

static char  *stype=0;
module_param(stype,charp,0644);
EXPORT_SYMBOL(stype); //导出符号


//定义函数, 并导出符号
int my_add(int a, int b)
{
	return a+b;
}
EXPORT_SYMBOL(my_add); //导出符号

int my_sub(int a, int b)
{
	return a-b;
}
EXPORT_SYMBOL(my_sub); //导出符号


//init时打印传入参数
static int __init param_init(void)
{
	printk(KERN_ALERT "param init!\n");
	printk(KERN_ALERT "itype=%d\n", itype);
	printk(KERN_ALERT "btype=%d\n", btype);
	printk(KERN_ALERT "ctype=%d\n", ctype);
	printk(KERN_ALERT "stype=%s\n", stype);
	return 0;
}
module_init(param_init);

static void __exit param_exit(void)
{
	printk(KERN_ALERT "module exit!\n");
}
module_exit(param_exit);


MODULE_LICENSE("GPL2");
MODULE_AUTHOR("embedfire ");
MODULE_DESCRIPTION("module_param");
MODULE_ALIAS("module_param");

